package com.jxm.linear;

/**
 * @Author: jxm
 * @Description: 栈解决括号匹配问题
 * @Date: 2022/6/14 14:17
 * @Version: 1.0
 */
public class StackQuestion {

    public static void main(String[] args) {
        String str = "(上海(长安)()))";
        System.out.println(isMatch(str));
    }

    public static boolean isMatch(String str){
        //1.创建栈对象，用来存储左括号
        Stack<String> chars = new Stack<>();
        //2.从左往右遍历字符串
        for (int i = 0;i<str.length();i++){
            String currChar = str.charAt(i)+"";
            //3.判断当前字符串是否为左括号，如果是，则把字符串放入栈中
            if(currChar.equals("(")){
                chars.push(currChar);
            }else if(currChar.equals(")")){
                //4.继续判断当前字符串是否为右括号，如果是，则从栈中弹出一个左括号，并判断弹出的结果是否为null,如果为null，证明没有匹配的左括号，反之有
                String pop = chars.pop();
                if(pop == null){
                    return false;
                }
            }
        }
        //5.判断栈中是否还剩余左括号，如果有，则证明括号不匹配
        if(chars.size() == 0) return true;

        return false;
    }
}
